package Interfaz;

import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.HashMap;

import javax.swing.JComboBox;

import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Monitor;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Label;
import org.eclipse.wb.swt.SWTResourceManager;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.MessageBox;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.swt.widgets.Link;
import org.eclipse.swt.widgets.TableItem;
import org.eclipse.swt.widgets.Button;

import DTO.DTOFecha;
import DTO.DTOMostrarFixture;
import DTO.DTOUnResultado;
import Negocios.ControlFixture;
import Persistencia.DAO.DAOCompetencia;
import Persistencia.Entidad.Competencia;
import Persistencia.Entidad.FormaDePuntuacion;
import Persistencia.Entidad.ModalidadDeCompetencia;

import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.custom.CCombo;
import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.CoolBar;
import org.eclipse.swt.widgets.Composite;
import javax.swing.JScrollBar;


/**
 * CU019 - Mostrar fixture de la competencia
 * @author 
 */
public class CU019 {

	protected Shell shlFixture;
	private Table table;
	DTOMostrarFixture datos;
	Button btnEditarResultado;
	Combo comboFechas;
	
	private CU020 pantallaAnterior;
	
	private CU019 myself;
	
	private int idCompetencia;
	
	private ArrayList<Integer> idPartido = new ArrayList<Integer>();

	/**
	 * Launch the application.
	 * @param args
	 * @wbp.parser.entryPoint
	 */
	public CU019(int idCompetencia, CU020 pantallaAnterior){
		ControlFixture controlFixture= new ControlFixture();
		datos=controlFixture.mostrarFixtureDeCompetencia(idCompetencia);
		this.pantallaAnterior = pantallaAnterior;
		this.idCompetencia = idCompetencia;
		myself = this;
	}

	/**
	 * Open the window.
	 */
	public void open() {
		Display display = Display.getDefault();
		createContents();
		
		// Centrar ventana
		Monitor primary = display.getPrimaryMonitor();
		Rectangle bounds = primary.getBounds();
		Rectangle rect = shlFixture.getBounds();	    
		int x = bounds.x + (bounds.width - rect.width) / 2;
		int y = bounds.y + (bounds.height - rect.height) / 2;	    
		shlFixture.setLocation(x, y);
		shlFixture.setLayout(null);
		
		Label label = new Label(shlFixture, SWT.NONE);
		label.setBounds(10, 15, 74, 15);
		label.setText("Competencia:");
		
		Label label_1 = new Label(shlFixture, SWT.NONE);
		label_1.setBounds(90, 15, 185, 15);
		label_1.setText(datos.getNombreCompetencia());
		label_1.setFont(SWTResourceManager.getFont("Segoe UI", 9, SWT.BOLD));
		
		Label lblEstado = new Label(shlFixture, SWT.NONE);
		lblEstado.setBounds(10, 55, 38, 15);
		lblEstado.setText("Estado:");
		
		Label lblEnDisputa = new Label(shlFixture, SWT.NONE);
		lblEnDisputa.setBounds(54, 55, 155, 15);

		lblEnDisputa.setText(datos.getEstadoCompetencia());
		
		ArrayList<DTOFecha> fechas = datos.getFechas();
		
		// Ordeno por nro. de fecha
		for (int i = 1; i < fechas.size(); i++) {
			for (int j = 0; j < i; j++) {
				if (fechas.get(i).getNumero() < fechas.get(j).getNumero()) {
					DTOFecha aux = fechas.get(i);
					fechas.set(i, fechas.get(j));
					fechas.set(j, aux);
				}
			}
		}
		
		String[] f = new String[fechas.size()];
		for (int i = 0; i < fechas.size(); i++) {
			f[i] = (new Integer(fechas.get(i).getNumero())).toString();
		}
		
		comboFechas = new Combo(shlFixture, SWT.READ_ONLY);
		comboFechas.setListVisible(true);
		comboFechas.setItems(f);
		comboFechas.setVisibleItemCount(15);
		comboFechas.setBounds(48, 88, 61, 21);
		comboFechas.addSelectionListener(new SelectionAdapter() {
			@Override
			public void widgetSelected(SelectionEvent e) {
				if (comboFechas.getSelectionIndex() != -1) {
					table.removeAll();
					btnEditarResultado.setEnabled(false);
					idPartido.clear();
					
					ArrayList<DTOUnResultado> resultados = datos.getFechas().get(Integer.parseInt(comboFechas.getItem(comboFechas.getSelectionIndex())) - 1).getResultados();
					int numeroPartido=0;
					for (DTOUnResultado dto : resultados) {
						numeroPartido++;
						TableItem tableItem = new TableItem(table, SWT.NONE);
						tableItem.setText(new String[] {numeroPartido+"",
								dto.getParticipante1(), dto.getParticipante2(), dto.getResultados()});
						
						idPartido.add(dto.getIdPartido());
					}
				}
			}
		});
		
		btnEditarResultado = new Button(shlFixture, SWT.NONE);
		btnEditarResultado.setBounds(670, 152, 108, 32);
		btnEditarResultado.setText("Editar resultado");
		btnEditarResultado.setEnabled(false);
		btnEditarResultado.addSelectionListener(new SelectionAdapter() {
			@Override
			public void widgetSelected(SelectionEvent e) {
				/*MessageBox mensaje = new MessageBox(shlFixture, SWT.ICON_INFORMATION);
				mensaje.setMessage("Id competencia: " + idCompetencia
						+ "\nId fecha: " + datos.getFechas().get(Integer.parseInt(combo.getItem(combo.getSelectionIndex())) - 1).getIdFecha()
						+ "\nId partido: " + idPartido.get(table.getSelectionIndex()));
				mensaje.open();*/
				
				shlFixture.setVisible(false);
				
				DAOCompetencia daoCompetencia = new DAOCompetencia();
				Competencia competencia = daoCompetencia.getCompetencia(idCompetencia);
				
				switch (competencia.getFormaDePuntuacion().getId()) {
					case FormaDePuntuacion.PUNTUACION:
						try {
							CU018_puntuacion editarPuntuacion = new CU018_puntuacion(idCompetencia, myself,
									datos.getFechas().get(Integer.parseInt(comboFechas.getItem(comboFechas.getSelectionIndex())) - 1).getIdFecha(),
									idPartido.get(table.getSelectionIndex()));
							editarPuntuacion.open();
							
						}
						catch (Exception ex) {
							ex.printStackTrace();
						}
						break;
					case FormaDePuntuacion.SETS:
						try {
							CU018_set editarSets = new CU018_set(idCompetencia, myself,
									datos.getFechas().get(Integer.parseInt(comboFechas.getItem(comboFechas.getSelectionIndex())) - 1).getIdFecha(),
									idPartido.get(table.getSelectionIndex()));
							editarSets.open();
						}
						catch (Exception ex) {
							ex.printStackTrace();
						}
						break;
					case FormaDePuntuacion.RESULTADO_FINAL:
						try {
							CU018_res_final editarResultadoFinal = new CU018_res_final(idCompetencia, myself,
									datos.getFechas().get(Integer.parseInt(comboFechas.getItem(comboFechas.getSelectionIndex())) - 1).getIdFecha(),
									idPartido.get(table.getSelectionIndex()));
							editarResultadoFinal.open();
						}
						catch (Exception ex) {
							ex.printStackTrace();
						}
						break;
				}
			}
		});
		
		table = new Table(shlFixture, SWT.BORDER | SWT.FULL_SELECTION);
		table.setBounds(10, 128, 639, 355);
		table.setHeaderVisible(true);
		table.setLinesVisible(true);
		table.addSelectionListener(new SelectionAdapter() {
			public void widgetSelected(SelectionEvent e) {
				if (table.getSelectionIndex() != -1) {
					btnEditarResultado.setEnabled(true);
				}
			}
		});
		
		TableColumn tblclmnNewColumn = new TableColumn(table, SWT.NONE);
		tblclmnNewColumn.setWidth(54);
		tblclmnNewColumn.setText("Partido");
		
		TableColumn tblclmnContrincante = new TableColumn(table, SWT.NONE);
		tblclmnContrincante.setWidth(120);
		tblclmnContrincante.setText("Contrincante 1");
		
		TableColumn tblclmnContrincante_1 = new TableColumn(table, SWT.NONE);
		tblclmnContrincante_1.setWidth(120);
		tblclmnContrincante_1.setText("Contrincante 2");
		
		TableColumn tblclmnResultado = new TableColumn(table, SWT.NONE);
		tblclmnResultado.setWidth(343);
		tblclmnResultado.setText("Resultado");
		
		Label lblFechar = new Label(shlFixture, SWT.NONE);
		lblFechar.setBounds(10, 94, 38, 15);
		lblFechar.setText("Fecha:");
		
		Button btnSalir = new Button(shlFixture, SWT.NONE);
		btnSalir.setBounds(670, 525, 108, 32);
		btnSalir.setText("Salir");
		btnSalir.addSelectionListener(new SelectionAdapter() {
			@Override
			public void widgetSelected(SelectionEvent e) {
				shlFixture.close();
			}
		});

		
				
		shlFixture.open();
		shlFixture.layout();
		while (!shlFixture.isDisposed()) {
			if (!display.readAndDispatch()) {
				display.sleep();
			}
		}
	}

	/**
	 * Create contents of the window.
	 */
	protected void createContents() {
		shlFixture = new Shell(SWT.CLOSE | SWT.MIN | SWT.TITLE);
		shlFixture.setSize(800, 600);
		shlFixture.setText("Fixture");
		shlFixture.addListener(SWT.Close, new Listener() {
			public void handleEvent(Event event) {
				pantallaAnterior.shlCompetencia.setVisible(true);
				pantallaAnterior.shlCompetencia.forceFocus();
			}
		});
	}
	
	public void actualizar() {
		ControlFixture controlFixture = new ControlFixture();
		datos = controlFixture.mostrarFixtureDeCompetencia(idCompetencia);
		
		table.removeAll();
		btnEditarResultado.setEnabled(false);
		idPartido.clear();
		
		ArrayList<DTOUnResultado> resultados = datos.getFechas().get(Integer.parseInt(comboFechas.getItem(comboFechas.getSelectionIndex())) - 1).getResultados();
		int contador = 0;
		for (DTOUnResultado dto : resultados) {
			contador++;
			TableItem tableItem = new TableItem(table, SWT.NONE);
			tableItem.setText(new String[] {contador+"",
					dto.getParticipante1(), dto.getParticipante2(), dto.getResultados()});
			
			idPartido.add(dto.getIdPartido());
		}
	}
}
